home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Sprite 1984 - 1993
/
Sprite 1984 - 1993.iso
/
src
/
kernel
/
net
/
netUltraInt.h
< prev
Wrap
C/C++ Source or Header
|
1992-12-18
|
25KB
|
681 lines
/*
* netUltraInt.h --
*
* Definitions for the UltraNet VME adapter.
*
* Copyright 1990 Regents of the University of California
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies. The University of California
* makes no representations about the suitability of this
* software for any purpose. It is provided "as is" without
* express or implied warranty.
*
* $Header: /cdrom/src/kernel/Cvsroot/kernel/net/netUltraInt.h,v 1.6 92/06/03 22:48:03 voelker Exp $ SPRITE (Berkeley)
*/
#ifndef _NETULTRAINT
#define _NETULTRAINT
#include <netInt.h>
#include <fs.h>
/*
* Defined constants:
*
* NET_ULTRA_CONTROL_REG_ADDR Address of the Ultranet control
* register.
* NET_ULTRA_INTERRUPT_PRIORITY The interrupt priority generated by the card.
* This value derived from the Ultranet
* documentation
* NET_ULTRA_VME_REQUEST_LEVEL The level of requests to the VME bus.
* This value was derived from the Ultranet
* source.
* NET_ULTRA_VME_ADDRESS_SPACE Defines how the adapter uses the VME
* address space in the following manner:
* Bit 1 set => XRBs are in A32, A24 otherwise.
* Bit 2 set => buffers are in A32, A24 otherwise.
* Bit 3 set => Non-privileged access,
* supervisor access otherwise.
* Bit 4 set => block mode DMA, word access
* otherwise.
*/
#ifdef sun3
#define NET_ULTRA_CONTROL_REG_ADDR 0xffff7740
#define NET_ULTRA_INTERRUPT_PRIORITY 3
#define NET_ULTRA_VME_REQUEST_LEVEL 3
#define NET_ULTRA_VME_ADDRESS_SPACE 0
#define NET_ULTRA_MAP_THRESHOLD 1024
#endif
#ifdef sun4
#define NET_ULTRA_CONTROL_REG_ADDR 0xffff7740
#define NET_ULTRA_INTERRUPT_PRIORITY 3
#define NET_ULTRA_VME_REQUEST_LEVEL 3
#define NET_ULTRA_VME_ADDRESS_SPACE 0
#define NET_ULTRA_MAP_THRESHOLD 0
#endif
typedef enum EventEnum {
TO_ADAPTER_FILLED,
INFO_NOT_PENDING,
PROCESS_XRB,
INTERRUPT,
SEND_REQ,
SEND_REQ_INFO,
START_DSND,
DSND,
DSND_WAIT,
DSND_STREAM,
} EventEnum;
typedef struct NetUltraTraceInfo {
int sequence;
EventEnum event;
int index;
struct NetUltraXRBInfo *infoPtr;
Timer_Ticks ticks;
} NetUltraTraceInfo;
#define TRACE_SIZE 100
#define NEXT_TRACE(statePtr, ptrPtr) { \
NetUltraTraceInfo *tmpPtr = (statePtr)->tracePtr; \
*(ptrPtr) = tmpPtr; \
tmpPtr++; \
if (tmpPtr == &((statePtr)->traceBuffer[TRACE_SIZE])) { \
tmpPtr = (statePtr)->traceBuffer; \
} \
(statePtr)->tracePtr = tmpPtr; \
(*(ptrPtr))->sequence = (statePtr)->traceSequence++; \
}
/*
* Structure to hold all state information associated with an Ultranet
* vme adapter.
*/
typedef struct NetUltraState {
int magic; /* Useful for debugging. */
int flags; /* See below. */
volatile int *intrReg; /* Address of the adapter interrupt
* register. */
volatile int *resetReg; /* Address of the reset register. */
struct NetUltraXRB *firstToHostPtr; /* First XRB in queue to host. */
struct NetUltraXRB *nextToHostPtr; /* Next XRB to be filled by
* the adapter. */
struct NetUltraXRB *lastToHostPtr; /* Last XRB in queue to host. */
struct NetUltraXRB *firstToAdapterPtr; /* First XRB in queue to adapter. */
struct NetUltraXRB *nextToAdapterPtr; /* Next XRB to be filled by host. */
struct NetUltraXRB *lastToAdapterPtr; /* Last XRB in queue to adapter. */
int adapterVersion; /* Version of adapter software. */
int priority; /* Interrupt priority. */
int vector; /* Interrupt vector. */
int requestLevel; /* VME bus request level. */
int addressSpace; /* Address space for queues and
* buffers. */
int maxReadPending; /* Maximum pending datagram
* reads on the interface. */
int numReadPending; /* Number of pending reads. */
int readBufferSize; /* Size of pending read buffers. */
int maxWritePending; /* Maximum pending datagram writes.*/
int numWritePending; /* Number of pending writes. */
Address buffersDVMA; /* DVMA buffers for pending reads
* and writes. */
Address buffers; /* Address of DVMA buffers in kernel
* address space. */
int bufferSize; /* Size of a DVMA buffer. */
int numBuffers; /* Number of DVMA buffers. */
List_Links freeBufferListHdr; /* List of free DVMA buffers*/
List_Links *freeBufferList; /* Ptr to list of free DVMA
* buffers*/
Sync_Condition bufferAvail; /* Condition to wait for a free
* DVMA buffer. */
Sync_Condition toAdapterAvail; /* Condition to wait for an XRB to
* the adapter to become available. */
Boolean queuesInit; /* TRUE => XRB queues have been
* allocated. */
List_Links pendingXRBInfoListHdr; /* List of info about pending
* XRBs.*/
List_Links *pendingXRBInfoList; /* Pointer to list of info about
* pending XRBs. */
List_Links freeXRBInfoListHdr;/* List of free XRB info
* structures. */
List_Links *freeXRBInfoList; /* Pointer to list of info about
* pending XRBs. */
Net_Interface *interPtr; /* Interface structure associated
* with this adapter. */
NetUltraTraceInfo *tracePtr;
NetUltraTraceInfo traceBuffer[TRACE_SIZE];
int traceSequence;
Net_UltraStats stats;
} NetUltraState;
#define NET_ULTRA_STATE_MAGIC 0x3a5a7a9a
/*
* Size of the XRB queues.
*/
#define NET_ULTRA_NUM_TO_HOST 2 /* Number of XRBs to host. */
#define NET_ULTRA_NUM_TO_ADAPTER 2 /* Number of XRBs to adapter. */
/*
* The following are defined for the flags field of the NetUltraState
* structure.
*/
#define NET_ULTRA_STATE_EXIST 0x1 /* The adapter exists and its control
* registers can be accessed. */
#define NET_ULTRA_STATE_LOAD 0x2 /* The ucode is being downloaded. */
#define NET_ULTRA_STATE_GO 0x4 /* The go command has been sent. */
#define NET_ULTRA_STATE_INIT 0x8 /* The init command has been sent. */
#define NET_ULTRA_STATE_START 0x10 /* The start command has
* been sent and the adapter is
* online. */
#define NET_ULTRA_STATE_EPROM 0x20 /* A reset command has just been
* sent and the adapter is in
* EPROM mode. */
#define NET_ULTRA_STATE_ECHO 0x40 /* Received datagrams are sent
* back to sender. */
#define NET_ULTRA_STATE_DSND_TEST 0x80 /* A test of the datagram round-
* trip time is in progress. */
#define NET_ULTRA_STATE_SINK 0x100 /* Adapter will sink all received
* packets. */
#define NET_ULTRA_STATE_STATS 0x200 /* Collect statistics. */
#define NET_ULTRA_STATE_NORMAL 0x400 /* Adapter is in normal state
* (no tests being run). */
/*
* When an XRB is sent to the adapter we queue up information about it
* that is used for processing the completion of the XRB.
*/
#define NET_ULTRA_INFO_DATA_SIZE 128
typedef struct NetUltraXRBInfo {
List_Links links; /* Used to queue these up. */
int flags; /* See below. */
void (*doneProc)(); /* Called from interrupt handler
* when associated XRB is done. */
ClientData doneData; /* Data for doneProc. */
struct NetUltraXRB *xrbPtr; /* XRB associated with this
* structure. */
int scatterLength; /* Size of the scatter/gather array. */
Net_ScatterGather *scatterPtr; /* Ptr to scatter/gather array that
* was passed to NetUltraSendReq. */
int requestSize; /* Size of the original request. */
union NetUltraRequest *requestPtr; /* Ptr to the original request. */
Address buffer; /* Address of original buffer
* if it was remapped. */
int requestTag; /* tag for request blocks referring
* to this info block */
} NetUltraXRBInfo;
/*
* Values for flag field of NetUltraXRBInfo.
*/
#define NET_ULTRA_INFO_PENDING 0x1 /* The XRB associated with the info
* is pending completion. */
#define NET_ULTRA_INFO_STD_BUFFER 0x2 /* Buffer is a 'standard' one, meaning
* it is in the buffer area pointed
* to by the state structure. */
#define NET_ULTRA_INFO_REMAP 0x4 /* If set then the buffer was
* remapped to make it contiguous
* with the data. */
/*
* DMA information that controls DMA to and from the adapter.
* This is part of the XRB. The id and reference fields are used
* for virtual circuits. The adapter may return an XRB that is
* a request to DMA more data, and the id and reference help the
* host to set things up. We don't do virtual circuits yet.
*
* The offset field is of unknown use and should be set to 0.
*/
typedef struct NetUltraDMAInfo {
unsigned char cmd; /* The DMA command. See below. */
unsigned char id; /* Transaction id. Set to 0. */
unsigned short reference; /* VC reference. Set to 0. */
unsigned int offset; /* Buffer offset. Set to 0. */
NetUltraXRBInfo *infoPtr; /* Unused. */
unsigned int length; /* Length of the DMA (size of the
* XRB minus this structure). */
} NetUltraDMAInfo;
/*
* Definitions for the cmd field of the NetUltraDMA structure.
*/
#define NET_ULTRA_DMA_CMD_MASK 0xc0 /* Use this to mask off commands. */
#define NET_ULTRA_DMA_CMD_XRB 0x80 /* Only XRB is being DMA'ed. */
#define NET_ULTRA_DMA_CMD_XRB_DATA 0xc0 /* An XRB and data is being DMA'ed. */
#define NET_ULTRA_DMA_CMD_FROM_ADAPTER 0x20 /* If this bit is set then the
* DMA word is from the adapter
* to the host. */
/*
* The following commands are defined in the Ultranet source but appear
* to be useful only for channel-based adapters.
*/
#define NET_ULTRA_DMA_CMD_DMA 0x00 /* Adapter asking for data. */
#define NET_ULTRA_DMA_CMD_DMA_DATA 0x40 /* Adapter sending data to host. */
/*
* Notes on above definitions. If you are sending a datagram
* set the cmd field to NET_ULTRA_DMA_CMD_XRB_DATA. If you want to receive
* a datagram set the cmd field to NET_ULTRA_DMA_CMD_XRB. When the adapter
* finishes processing an XRB the cmd field will be set to
* (NET_ULTRA_DMA_CMD_XRB | NET_ULTRA_DMA_CMD_FROM_ADAPTER). These notes
* only apply to the Ultranet VME adapter card. Any other setting of
* the cmd field consitutes an error for that card.
*/
/*
* Following the DMA information in the XRB is what is referred to as
* a "stdRB" in the Ultranet documentation. This is a bit confusing
* because an stdRB is nested in an XRB which is nested in an RB.
* We refer to the contents of an XRB as a "request" rather than a
* "request block" to avoid confusion.
*
* This structure is request information that is common to all requests.
*/
typedef struct NetUltraRequestHdr {
unsigned char cmd; /* The request command. See below. */
unsigned char status; /* Status. See below. */
unsigned short reference; /* Reference to datagram or
* virtual circuit. */
NetUltraXRBInfo *infoPtr; /* Info associated with the XRB. */
Address buffer; /* Data buffer in VME space. */
int size; /* Size of the data buffer. */
} NetUltraRequestHdr;
/*
* Values for the cmd field of the NetUltraRequestHdr.
*/
#define NET_ULTRA_START_REQ (unsigned char ) (0x1)
#define NET_ULTRA_STOP_REQ (unsigned char ) (0x2)
#define NET_ULTRA_NEW_START_REQ (unsigned char ) (0x3)
#define NET_ULTRA_DGRAM_SEND_REQ (unsigned char ) (0x80 | 17)
#define NET_ULTRA_DGRAM_RECV_REQ (unsigned char ) (0x80 | 18)
/*
* Values for the status field of a NetUltraRequestHdr. These are set
* by the adapter after it processes a command. Some of them have
* unknown meaning. The first group (odd values) are considered
* successful completion of the command.
*/
#define NET_ULTRA_STATUS_OK 1
#define NET_ULTRA_STATUS_OK_EOM 3
#define NET_ULTRA_STATUS_OK_DECIDE 5
#define NET_ULTRA_STATUS_OK_CLOSED 7
#define NET_ULTRA_STATUS_OK_WITHDRAWN 9
#define NET_ULTRA_STATUS_OK_REJECT_CONNECTION 11
#define NET_ULTRA_STATUS_OK_CONN_REQ 13
#define NET_ULTRA_STATUS_OK_CLOSING 15
#define NET_ULTRA_STATUS_OK_TIMEDOUT 17
#define NET_ULTRA_STATUS_OK_OUT_OF_SEQ 19
#define NET_ULTRA_STATUS_FAIL_INVALID_REQ 2
#define NET_ULTRA_STATUS_FAIL_NO_RESOURCES 4
#define NET_ULTRA_STATUS_FAIL_UNKNOWN_REF 6
#define NET_ULTRA_STATUS_FAIL_BUF_TOO_SMALL 8
#define NET_ULTRA_STATUS_FAIL_BUF_TOO_LONG 10
#define NET_ULTRA_STATUS_FAIL_ILLEGAL_REQ 12
#define NET_ULTRA_STATUS_FAIL_REM_ABORT 14
#define NET_ULTRA_STATUS_FAIL_LOC_TIMEOUT 16
#define NET_ULTRA_STATUS_FAIL_UNKNOWN_CONN_CLASS 18
#define NET_ULTRA_STATUS_FAIL_DUP_REQ 20
#define NET_ULTRA_STATUS_FAIL_CONN_REJECT 22
#define NET_ULTRA_STATUS_FAIL_NEGOT_FAILED 24
#define NET_ULTRA_STATUS_FAIL_ILLEGAL_ADDRESS 26
#define NET_ULTRA_STATUS_FAIL_NETWORK_ERROR 28
#define NET_ULTRA_STATUS_FAIL_PROTOCOL_ERROR 30
#define NET_ULTRA_STATUS_FAIL_ILLEGAL_RB_LENGTH 32
#define NET_ULTRA_STATUS_FAIL_UNKNOWN_SAP_ID 34
#define NET_ULTRA_STATUS_FAIL_ZERO_RB_ID 36
#define NET_ULTRA_STATUS_FAIL_ADAPTER_DOWN 38
/*
* The following are the formats for request block (RB) that are sent
* to the adapter. We only use a few of them.
*/
/*
* The request format for a datagram request. This structure has the
* same format as a Net_UltraHeader so the two can be interchanged.
*/
typedef struct NetUltraDatagramRequest {
NetUltraRequestHdr hdr; /* Request header. */
Net_UltraTLAddress remoteAddress; /* Address of remote host. */
Net_UltraTLAddress localAddress; /* Address of local host. */
unsigned short options; /* Unused. */
unsigned short quality; /* Unused. */
unsigned int pad3;
} NetUltraDatagramRequest;
/*
* Define the number and pending reads and writes on an interface.
*/
#define NET_ULTRA_PENDING_READS NET_ULTRA_NUM_TO_HOST
#define NET_ULTRA_PENDING_WRITES NET_ULTRA_NUM_TO_ADAPTER
/*
* Request format for a start (NEW-START in Ultra doc) command.
*/
typedef struct NetUltraStartRequest {
NetUltraRequestHdr hdr; /* Request header. */
/* Host to adapter fields. */
unsigned short sequence; /* Sequence number. */
unsigned short softwareRel; /* Software release. */
unsigned long flags; /* See below. */
unsigned short hostType; /* Type of host. See below. */
unsigned short hostOS; /* Host operating system. See below. */
unsigned short hostHW; /* Host hardware. See below. */
unsigned char sendTimeout; /* Send timeout in seconds. */
unsigned char recvTimeout; /* Recv timeout in seconds. */
unsigned char beatPeriod; /* Seconds between heartbeats
* (0 = no heartbeats) */
unsigned char hostMaxBytes; /* Maximum packet size allowed by
* host (as a power of 2). */
unsigned char pad1[14]; /* Padding. */
unsigned char netAddressSize; /* sizeof(Net_Address).*/
unsigned char netAddressBuf[sizeof(Net_Address)]; /* Net address
* (station address). */
unsigned char pad2[15 - sizeof(Net_Address)]; /* Allow a
* net address to grow. */
/* Adapter to host fields. */
unsigned short ucodeRel; /* Micro-code release */
unsigned short adapterType; /* Type of adapter. See below. */
unsigned short adapterHW; /* Adapter hardware info. See below. */
unsigned short maxVC; /* Maximum virtual circuits. */
unsigned char maxRECV; /* Maximum pending RECVs. */
unsigned char maxDRCV; /* Maximum pending DRCVs. */
unsigned char maxERCV; /* Maximum pending ERCVs. */
unsigned char maxSEND; /* Maximum pending SEND/SEOMs. */
unsigned char maxDSND; /* Maximum pending DSNDs. */
unsigned char maxESND; /* Maximum pending ESNDs. */
unsigned char slot; /* Slot number in 1000 hub. */
unsigned char speed; /* Line speed (MBytes/sec). */
unsigned char adapterMaxBytes;/* Maximum packet size allowed by
* adapter (as a power of 2). */
unsigned char pad3[31];
} NetUltraStartRequest;
/*
* Request format for a stop command.
*/
typedef struct NetUltraStopRequest {
NetUltraRequestHdr hdr; /* Request header. */
/*
* Nothing here.
*/
} NetUltraStopRequest;
/*
* Values for the flags field of a NetUltraStartRequest.
*/
#define NET_ULTRA_START_FLAGS_COPYDATA 1 /* Run in copydata mode, good
* only for HSX adapters. */
/*
* Values for the hostType field of a NetUltraStartRequest.
*/
#define NET_ULTRA_START_HOSTTYPE_FB 1 /* Ultra Frame Buffer. */
#define NET_ULTRA_START_HOSTTYPE_CRAYXMP 2 /* Cray X-MP. */
#define NET_ULTRA_START_HOSTTYPE_CRAY2 3 /* Cray 2 */
#define NET_ULTRA_START_HOSTTYPE_ALL2 4 /* Alliant w/ 2 MB VME */
#define NET_ULTRA_START_HOSTTYPE_ALL20 5 /* Alliant w/ 20 MB VME */
#define NET_ULTRA_START_HOSTTYPE_CONVEX 6 /* Convex. */
#define NET_ULTRA_START_HOSTTYPE_SUN 7 /* Sun. */
#define NET_ULTRA_START_HOSTTYPE_IBM 8 /* Some sort of IBM */
#define NET_ULTRA_START_HOSTTYPE_SGI 9 /* SGI Iris */
#define NET_ULTRA_START_HOSTTYPE_MIPS 10 /* MIPS */
#define NET_ULTRA_START_HOSTTYPE_UCRAY 11 /* MicroCray */
/*
* Values for the adapterType field of a NetUltraStartRequest.
*/
#define NET_ULTRA_START_ADAPTYPE_HSX 1 /* HSX host adapter. */
#define NET_ULTRA_START_ADAPTYPE_FB 2 /* Ultra Frame Buffer. */
#define NET_ULTRA_START_ADAPTYPE_VME 3 /* VME host adapter. */
#define NET_ULTRA_START_ADAPTYPE_LINK 4 /* Link adapter. */
#define NET_ULTRA_START_ADAPTYPE_HSC 5 /* HSC host adapter. */
#define NET_ULTRA_START_ADAPTYPE_LSX 6 /* LSX host adapter. */
#define NET_ULTRA_START_ADAPTYPE_BMC 7 /* BMC host adapter. */
/*
* Union of all the different requests.
*/
typedef union {
NetUltraDatagramRequest dgram; /* Datagram request. */
NetUltraStartRequest start; /* Start request. */
NetUltraStopRequest stop; /* Stop request. */
} NetUltraRequest;
/*
* Format of the Request Blocks that are sent to the adapter.
* These are referred to as XRBs (Transmitted Request Blocks) in the
* Ultranet documentation. Note that there is an extra field (filled)
* at the beginning of our XRB. The Ultranet source has an extra
* structure (rbqe) that is allocated in dma space and consists of their XRB and
* the filled flag. The XRB is set up elsewhere and copied into the rbqe.
* We avoid that by putting the filled flag in the XRB itself.
*/
typedef struct NetUltraXRB{
Boolean filled; /* TRUE means the XRB has valid contents. */
NetUltraDMAInfo dma; /* The DMA information. */
NetUltraRequest request; /* The request itself. */
} NetUltraXRB;
/*
* The following are a list of the opcodes for the various commands
* that can be sent to the Ultranet adapter. The commands are different
* from the requests in that they are not enqueued. The adapter is
* pointed at them directly and modifies their contents (when appropriate)
* directly. In general the commands can only be sent after a reset
* (while in EPROM mode).
*/
#define NET_ULTRA_INIT_OPCODE 1 /* Initialize */
#define NET_ULTRA_LOAD_OPCODE 2 /* Load ucode. */
#define NET_ULTRA_GO_OPCODE 3 /* Start execution. */
#define NET_ULTRA_DIAG_OPCODE 6 /* Diagnostics. */
#define NET_ULTRA_EXT_DIAG_OPCODE 7 /* Extended diagnostics. */
#define NET_ULTRA_INFO_OPCODE 8 /* Get adapter info */
/*
* Command block for the initialization command.
*/
typedef struct NetUltraInitCommand {
int opcode; /* NET_ULTRA_INIT_OPCODE*/
int reply; /* Returned by adapter. See below. */
int version; /* Adapter software version number. */
int toAdapterAddr; /* Queue of XRBs that are sent to the adapter.*/
int toAdapterNum; /* Number of elements in the queue. */
int toHostAddr; /* Queue of XRBs that are sent to the host.*/
int toHostNum; /* Number of elements in the queue. */
int XRBSize; /* Size of an XRB. */
char priority; /* Interrupt priority. */
char vector; /* Interrupt vector number. */
char requestLevel; /* VME bus request level. */
char addressSpace; /* VME address space for queues and buffers. */
char pad[28]; /* Needs to be 64 bytes long. */
} NetUltraInitCommand;
/*
* Values for the reply field of the NetUltraInitCommand. The adapter
* sets this after it receives the init command.
*/
#define NET_ULTRA_INIT_OK 1 /* Adapter initialized correctly. */
#define NET_ULTRA_BAD_SIZE 2 /* The XRBSize is wrong. */
/*
* Command block for the diagnostic command.
*/
typedef struct NetUltraDiagCommand {
int opcode; /* NET_ULTRA_DIAG_OPCODE. */
int reply; /* Returned by adapter. See below. */
unsigned long version; /* Firmware version. */
unsigned long error; /* Error code. 0 if all tests passed,
* number of test that failed
* otherwise. */
unsigned long hwModel; /* Hardware model. */
unsigned long hwVersion; /* Hardware version. */
unsigned long hwRevision; /* Hardware revision. */
unsigned long hwOption; /* Hardware option. */
unsigned long hwSerial; /* Hardware serial number. */
} NetUltraDiagCommand;
/*
* Values for the reply field of the NetUltraDiagCommand. The adapter
* sets this after it receives the command.
*/
#define NET_ULTRA_DIAG_OK 1 /* Command completed ok. */
/*
* Command block for the command to get the adapter info. For now this is
* the same structure as the diagnostic command (the difference between
* the two commands is that this one doesn't cause the diagnostics to
* be run.
*/
typedef NetUltraDiagCommand NetUltraInfoCommand;
/*
* Values for the reply field of the NetUltraInfoCommand. The adapter
* sets this after it receives the command.
*/
#define NET_ULTRA_INFO_OK 1 /* Command completed ok. */
/*
* Command block for the Extended Diagnostics command.
*/
typedef struct NetUltraExtDiagCommand {
int opcode; /* NET_ULTRA_EXT_DIAG_OPCODE. */
int reply; /* Returned by adapter. See below. */
unsigned long version; /* Firmware version. */
unsigned long error; /* Error code. 0 if all tests passed,
* otherwise the number of test that
* failed. */
unsigned long externalLoopback; /* 0 => do internal loopback,
* otherwise do external loopback */
unsigned long bufferAddress; /* VME address of 8k buffer in which
* to run tests. */
} NetUltraExtDiagCommand;
/*
* Reply values for the NetUltraExtDiagCommand.
*/
#define NET_ULTRA_EXT_DIAG_OK 1 /* Command completed ok. */
/*
* Size of the buffer for the extended diagnostics.
*/
#define NET_ULTRA_EXT_DIAG_BUF_SIZE 0x2000 /* 8KB. */
/*
* Command block for the command to download micro-code.
*/
typedef struct NetUltraLoadCommand {
int opcode; /* NET_ULTRA_LOAD_OPCODE. */
int reply; /* Returned by adapter. See below. */
unsigned long dataAddress; /* VME address of the ucode data. */
unsigned long loadAddress; /* Address at which adapter should
* load the ucode. */
unsigned long length; /* Length of the ucode data. */
char *unused; /* NOT USED. */
} NetUltraLoadCommand;
/*
* Reply values for the NetUltraLoadCommand.
*/
#define NET_ULTRA_LOAD_OK 1 /* Command completed ok. */
/*
* Command block for the go command.
*/
typedef struct NetUltraGoCommand {
int opcode; /* NET_ULTRA_GO_OPCODE. */
int reply; /* Returned by adapter. See below. */
unsigned long startAddress; /* Start of execution. */
} NetUltraGoCommand;
/*
* Reply values for the NetUltraGoCommand.
*/
#define NET_ULTRA_GO_OK 1 /* Command completed ok. */
/*
* Amount of time (in microseconds) to wait for the adapter to reset.
*/
#define NET_ULTRA_RESET_DELAY 5 * 1000 * 1000
/*
* Amount of time (in microseconds) to wait for the adapter to process a
* command.
*/
#define NET_ULTRA_DELAY 15 * 1000 * 1000 /* Some things take a long time. */
/*
* General routines.
*/
extern ReturnStatus NetUltraInit _ARGS_((Net_Interface *interPtr));
extern void NetUltraIntr _ARGS_((Net_Interface *interPtr, Boolean polling));
extern ReturnStatus NetUltraSendCmd _ARGS_((NetUltraState *statePtr, int ok,
int size, Address cmdPtr));
extern ReturnStatus NetUltraOutput _ARGS_((Net_Interface *interPtr,
Address hdrPr, Net_ScatterGather *scatterGatherPtr,
int scatterGatherLength, Boolean rpc,
ReturnStatus *statusPtr));
extern ReturnStatus NetUltraIOControl _ARGS_((Net_Interface *interPtr,
Fs_IOCParam *ioctlPtr, Fs_IOReply *replyPtr));
extern void Net_UltraReset _ARGS_((Net_Interface *interPtr));
extern void Net_UltraHardReset _ARGS_((Net_Interface *interPtr));
extern ReturnStatus NetUltraPendingRead _ARGS_((Net_Interface *interPtr,
int size, Address buffer));
extern ReturnStatus NetUltraInfo _ARGS_((NetUltraState *statePtr,
NetUltraInfoCommand *cmdPtr));
extern ReturnStatus NetUltraExtDiag _ARGS_((NetUltraState *statePtr,
Boolean external, char buffer[],
NetUltraExtDiagCommand *cmdPtr));
extern ReturnStatus NetUltraSendReq _ARGS_((NetUltraState *statePtr,
void (*doneProc)(), ClientData data,
Boolean rpc, int scatterLength,
Net_ScatterGather *scatterPtr, int requestSize,
NetUltraRequest *requestPtr));
#endif /* _NETULTRAINT */